package com.zhang.admin.util;

import com.zhang.admin.bean.Permission;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @title: 根据权限数据构建菜单数据
 * @author: zhangyf
 * @date: 2023/3/15 14:44
 **/
public class PermissionHelper {
    // 使用递归方法来构建菜单
    public static ArrayList<Permission> build(List<Permission> treeNodes){
        var trees = new ArrayList<Permission>();
        for (var treeNode : treeNodes){
            // 如果节点的上一级权限的id是0，说明是全部权限（ALL）
            if (treeNode.getParentId() == 0){
                treeNode.setLevel(1); // 所属层级是1
                // 在treeNodes树形结构中寻找treeNode的所有子节点
                trees.add(findChildren(treeNode,treeNodes));
            }
        }
        return trees;
    }

    // 递归查找子节点
    public static Permission findChildren(Permission treeNode,List<Permission> treeNodes){
        // 将treeNode的子节点设置为空列表
        treeNode.setChildren(new ArrayList<>());
        for (var it : treeNodes){
            if (Objects.equals(treeNode.getId(),it.getParentId())){
                it.setLevel(treeNode.getLevel()+1);
                if (treeNode.getChildren() == null){
                    treeNode.setChildren(new ArrayList<>());
                }
                treeNode.getChildren().add(findChildren(it,treeNodes));
            }
        }
        return treeNode;
    }
}
